访问电脑版页面

导航:老古开发网手机版STM32单片机Keil MDK编程

KEILv5 STM32 程序在APP与BOOTLOADER共用方法

导读:先将需要共用的程序定义在固定了FLASH地址中:#pragma arm section code=".ARM.__at_0x800F000"void Function(void){}#pragma arm section在Bootloader中调用固定地址的程序:((void (*)(void))0x0800F001)();**
关键字:
app,bootloader,STM32,

先将需要共用的程序定义在固定了FLASH地址中:

#pragma arm section code=".ARM.__at_0x800F000"

void Function(void)

#pragma arm section

在Bootloader中调用固定地址的程序:

((void (*)(void))0x0800F001)();

**注意:使用的是STM32F105VC,使用的thumb指令集,调用的程序地址最后一位为1,而不是”0x0800F000“


方法二:(未验证)

将程序的基地址写成表的形式存储在固定位置比如0x8008000

const uint32_t func_table[] =
{ (uint32_t)&func1,
(uint32_t)&func2};


在需要调用的地方直接使用根据地址表调用即可:

// 声明函数指针

void (func1*)(int a);

void (func2*)(int a, int b);


void app_init(void)

{

// 取函数表基地址

uint32_t *table_base = (uint32_t*)(0x08008000);


//初始化函数指针

func1 = (void (*)(int))(table_base[0] | 0x1);

func2 = (int (*)(int, int))(table_base[1] | 0x1);


// 调用函数

func1(11);

}


来源:互联网   作者:karen  2018/12/17 10:40:01
栏目: [ STM32单片机Keil MDK编程]

相关阅读

keil4和keil5的区别以及Keil5的安装激活教程解析

如何在STM32单片机的MDK工程中使用printf

KEILv5 STM32 程序在APP与BOOTLOADER共用方法

基于STM32对DS1302的驱动

Keil MDK3.20的stm32调试方法

STM32的数据类型基础介绍

基于keil mdk 标准外设库的软件开发

获取STM32 MCU唯一ID的方法

KEIL工具可通过MPS对基于CORTEX-M处理器的系统建立样机

STM32F4 C++ 封装库 之 EXTI

STM32单片机半主机模式的应用

如何构建STM32单片机keil的开发环境

基于stm32的keil开发环境搭建

基于STM32的MDK程序启动

基于Keil 5版本单片机编程软件中MDK的应用技巧解析

STM32单片机在KIEL4配置开发中的设置

新建STM32工程全局声明两个宏的原因

stm32之.hex 文件

stm32笔记: 将用户自定义关键字从MDK3.8 搬到 MDK4.70A

如何创建一个STM32工程模板